home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / wincrypt.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  13.0 KB  |  563 lines

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File:       wincrypt.h
  7. //
  8. //  Contents:   Cryptographic API Prototypes and Definitions
  9. //
  10. //----------------------------------------------------------------------------
  11.  
  12. #ifndef __WINCRYPT_H__
  13. #define __WINCRYPT_H__
  14. #pragma option push -b
  15.  
  16.  
  17. #if(_WIN32_WINNT >= 0x0400)
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. #ifdef __BORLANDC__
  24. #  include <pshpack8.h>
  25. #endif
  26.  
  27. //
  28. // Algorithm IDs and Flags
  29. //
  30.  
  31. // ALG_ID crackers
  32. #define GET_ALG_CLASS(x)                (x & (7 << 13))
  33. #define GET_ALG_TYPE(x)                 (x & (15 << 9))
  34. #define GET_ALG_SID(x)                  (x & (511))
  35.  
  36. // Algorithm classes
  37. #define ALG_CLASS_ANY                   (0)
  38. #define ALG_CLASS_SIGNATURE             (1 << 13)
  39. #define ALG_CLASS_MSG_ENCRYPT           (2 << 13)
  40. #define ALG_CLASS_DATA_ENCRYPT          (3 << 13)
  41. #define ALG_CLASS_HASH                  (4 << 13)
  42. #define ALG_CLASS_KEY_EXCHANGE          (5 << 13)
  43.  
  44. // Algorithm types
  45. #define ALG_TYPE_ANY                    (0)
  46. #define ALG_TYPE_DSS                    (1 << 9)
  47. #define ALG_TYPE_RSA                    (2 << 9)
  48. #define ALG_TYPE_BLOCK                  (3 << 9)
  49. #define ALG_TYPE_STREAM                 (4 << 9)
  50.  
  51. // Generic sub-ids
  52. #define ALG_SID_ANY                     (0)
  53.  
  54. // Some RSA sub-ids
  55. #define ALG_SID_RSA_ANY                 0
  56. #define ALG_SID_RSA_PKCS                1
  57. #define ALG_SID_RSA_MSATWORK            2
  58. #define ALG_SID_RSA_ENTRUST             3
  59. #define ALG_SID_RSA_PGP                 4
  60.  
  61. // Some DSS sub-ids
  62. //
  63. #define ALG_SID_DSS_ANY                 0
  64. #define ALG_SID_DSS_PKCS                1
  65. #define ALG_SID_DSS_DMS                 2
  66.  
  67. // Block cipher sub ids
  68. // DES sub_ids
  69. #define ALG_SID_DES                     1
  70. #define ALG_SID_3DES            3
  71. #define ALG_SID_DESX            4
  72. #define ALG_SID_IDEA            5
  73. #define ALG_SID_CAST            6
  74. #define ALG_SID_SAFERSK64        7
  75. #define ALD_SID_SAFERSK128        8
  76.  
  77. // KP_MODE
  78. #define CRYPT_MODE_CBCI            6    // ANSI CBC Interleaved
  79. #define CRYPT_MODE_CFBP            7    // ANSI CFB Pipelined
  80. #define CRYPT_MODE_OFBP            8    // ANSI OFB Pipelined
  81. #define CRYPT_MODE_CBCOFM        9    // ANSI CBC + OF Masking
  82. #define CRYPT_MODE_CBCOFMI        10    // ANSI CBC + OFM Interleaved
  83.  
  84. // RC2 sub-ids
  85. #define ALG_SID_RC2                     2
  86.  
  87. // Stream cipher sub-ids
  88. #define ALG_SID_RC4                     1
  89. #define ALG_SID_SEAL                    2
  90.  
  91. // Hash sub ids
  92. #define ALG_SID_MD2                     1
  93. #define ALG_SID_MD4                     2
  94. #define ALG_SID_MD5                     3
  95. #define ALG_SID_SHA                     4
  96. #define ALG_SID_MAC                     5
  97. #define ALG_SID_RIPEMD            6
  98. #define ALG_SID_RIPEMD160        7
  99. #define ALG_SID_SSL3SHAMD5        8
  100.  
  101.  
  102. // Our silly example sub-id
  103. #define ALG_SID_EXAMPLE                 80
  104.  
  105. #ifndef ALGIDDEF
  106. #define ALGIDDEF
  107. typedef unsigned int ALG_ID;
  108. #endif
  109.  
  110. // algorithm identifier definitions
  111. #define CALG_MD2        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
  112. #define CALG_MD4        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
  113. #define CALG_MD5        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
  114. #define CALG_SHA        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
  115. #define CALG_MAC        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
  116. #define CALG_RSA_SIGN   (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
  117. #define CALG_DSS_SIGN   (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
  118. #define CALG_RSA_KEYX   (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
  119. #define CALG_DES        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
  120. #define CALG_RC2        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
  121. #define CALG_RC4        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
  122. #define CALG_SEAL       (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
  123.  
  124. typedef struct _VTableProvStruc {
  125.     DWORD   Version;
  126.     FARPROC FuncVerifyImage;
  127.     FARPROC FuncReturnhWnd;
  128. } VTableProvStruc, *PVTableProvStruc;
  129.  
  130. typedef unsigned long HCRYPTPROV;
  131. typedef unsigned long HCRYPTKEY;
  132. typedef unsigned long HCRYPTHASH;
  133.  
  134. // dwFlags definitions for CryptAquireContext
  135. #define CRYPT_VERIFYCONTEXT     0xF0000000
  136. #define CRYPT_NEWKEYSET         0x8
  137. #define CRYPT_DELETEKEYSET      0x10
  138.  
  139. // dwFlag definitions for CryptGenKey
  140. #define CRYPT_EXPORTABLE        0x00000001
  141. #define CRYPT_USER_PROTECTED    0x00000002
  142. #define CRYPT_CREATE_SALT       0x00000004
  143. #define CRYPT_UPDATE_KEY        0x00000008
  144.  
  145. // exported key blob definitions
  146. #define SIMPLEBLOB              0x1
  147. #define PUBLICKEYBLOB           0x6
  148. #define PRIVATEKEYBLOB          0x7
  149.  
  150. #define AT_KEYEXCHANGE          1
  151. #define AT_SIGNATURE            2
  152.  
  153. #define CRYPT_USERDATA          1
  154.  
  155. // dwParam
  156. #define KP_IV                   1       // Initialization vector
  157. #define KP_SALT                 2       // Salt value
  158. #define KP_PADDING              3       // Padding values
  159. #define KP_MODE                 4       // Mode of the cipher
  160. #define KP_MODE_BITS            5       // Number of bits to feedback
  161. #define KP_PERMISSIONS          6       // Key permissions DWORD
  162. #define KP_ALGID                7       // Key algorithm
  163. #define KP_BLOCKLEN             8       // Block size of the cipher
  164.  
  165. // KP_PADDING
  166. #define PKCS5_PADDING           1       // PKCS 5 (sec 6.2) padding method
  167.  
  168. // KP_MODE
  169. #define CRYPT_MODE_CBC          1       // Cipher block chaining
  170. #define CRYPT_MODE_ECB          2       // Electronic code book
  171. #define CRYPT_MODE_OFB          3       // Output feedback mode
  172. #define CRYPT_MODE_CFB          4       // Cipher feedback mode
  173. #define CRYPT_MODE_CTS          5       // Ciphertext stealing mode
  174.  
  175. // KP_PERMISSIONS
  176. #define CRYPT_ENCRYPT           0x0001  // Allow encryption
  177. #define CRYPT_DECRYPT           0x0002  // Allow decryption
  178. #define CRYPT_EXPORT            0x0004  // Allow key to be exported
  179. #define CRYPT_READ              0x0008  // Allow parameters to be read
  180. #define CRYPT_WRITE             0x0010  // Allow parameters to be set
  181. #define CRYPT_MAC               0x0020  // Allow MACs to be used with key
  182.  
  183. #define HP_ALGID                0x0001  // Hash algorithm
  184. #define HP_HASHVAL              0x0002  // Hash value
  185. #define HP_HASHSIZE             0x0004  // Hash value size
  186.  
  187.  
  188. #define CRYPT_FAILED            FALSE
  189. #define CRYPT_SUCCEED           TRUE
  190.  
  191. #define RCRYPT_SUCCEEDED(rt)     ((rt) == CRYPT_SUCCEED)
  192. #define RCRYPT_FAILED(rt)        ((rt) == CRYPT_FAILED)
  193.  
  194. //
  195. // CryptGetProvParam
  196. //
  197. #define PP_ENUMALGS             1
  198. #define PP_ENUMCONTAINERS       2
  199. #define PP_IMPTYPE              3
  200. #define PP_NAME                 4
  201. #define PP_VERSION              5
  202. #define PP_CONTAINER            6
  203.  
  204. #define CRYPT_FIRST             1
  205. #define CRYPT_NEXT              2
  206.  
  207. #define CRYPT_IMPL_HARDWARE     1
  208. #define CRYPT_IMPL_SOFTWARE     2
  209. #define CRYPT_IMPL_MIXED        3
  210. #define CRYPT_IMPL_UNKNOWN      4
  211.  
  212. //
  213. // CryptSetProvParam
  214. //
  215. #define PP_CLIENT_HWND          1
  216.  
  217. #define PROV_RSA_FULL           1
  218. #define PROV_RSA_SIG            2
  219. #define PROV_DSS                3
  220. #define PROV_FORTEZZA           4
  221. #define PROV_MS_EXCHANGE        5
  222. #define PROV_SSL                6
  223.  
  224. //
  225. //STT defined Providers
  226. //
  227. #define PROV_STT_MER                    7
  228. #define PROV_STT_ACQ                    8
  229. #define PROV_STT_BRND                   9
  230. #define PROV_STT_ROOT                   10
  231. #define PROV_STT_ISS                    11
  232.  
  233.  
  234. #define MS_DEF_PROV_A       "Microsoft Base Cryptographic Provider v1.0"
  235. #define MS_DEF_PROV_W       L"Microsoft Base Cryptographic Provider v1.0"
  236. #ifdef UNICODE
  237. #define MS_DEF_PROV         MS_DEF_PROV_W
  238. #else
  239. #define MS_DEF_PROV         MS_DEF_PROV_A
  240. #endif
  241.  
  242. #define MAXUIDLEN               64
  243.  
  244. #define CUR_BLOB_VERSION        2
  245.  
  246. typedef struct _PROV_ENUMALGS {
  247.     ALG_ID    aiAlgid;
  248.     DWORD     dwBitLen;
  249.     DWORD     dwNameLen;
  250.     CHAR      szName[20];
  251. } PROV_ENUMALGS;
  252.  
  253.  
  254. typedef struct _PUBLICKEYSTRUC {
  255.         BYTE    bType;
  256.         BYTE    bVersion;
  257.         WORD    reserved;
  258.         ALG_ID  aiKeyAlg;
  259. } PUBLICKEYSTRUC;
  260.  
  261. typedef struct _RSAPUBKEY {
  262.         DWORD   magic;                  // Has to be RSA1
  263.         DWORD   bitlen;                 // # of bits in modulus
  264.         DWORD   pubexp;                 // public exponent
  265.                                         // Modulus data follows
  266. } RSAPUBKEY;
  267.  
  268.  
  269.  
  270. WINADVAPI
  271. BOOL
  272. WINAPI
  273. CryptAcquireContextA(
  274.     HCRYPTPROV *phProv,
  275.     LPCSTR pszContainer,
  276.     LPCSTR pszProvider,
  277.     DWORD dwProvType,
  278.     DWORD dwFlags);
  279. WINADVAPI
  280. BOOL
  281. WINAPI
  282. CryptAcquireContextW(
  283.     HCRYPTPROV *phProv,
  284.     LPCWSTR pszContainer,
  285.     LPCWSTR pszProvider,
  286.     DWORD dwProvType,
  287.     DWORD dwFlags);
  288. #ifdef UNICODE
  289. #define CryptAcquireContext  CryptAcquireContextW
  290. #else
  291. #define CryptAcquireContext  CryptAcquireContextA
  292. #endif // !UNICODE
  293.  
  294.  
  295. WINADVAPI
  296. BOOL
  297. WINAPI
  298. CryptReleaseContext(
  299.     HCRYPTPROV hProv,
  300.     DWORD dwFlags);
  301.  
  302.  
  303. WINADVAPI
  304. BOOL
  305. WINAPI
  306. CryptGenKey(
  307.     HCRYPTPROV hProv,
  308.     ALG_ID Algid,
  309.     DWORD dwFlags,
  310.     HCRYPTKEY *phKey);
  311.  
  312. WINADVAPI
  313. BOOL
  314. WINAPI
  315. CryptDeriveKey(
  316.     HCRYPTPROV hProv,
  317.     ALG_ID Algid,
  318.     HCRYPTHASH hBaseData,
  319.     DWORD dwFlags,
  320.     HCRYPTKEY *phKey);
  321.  
  322.  
  323. WINADVAPI
  324. BOOL
  325. WINAPI
  326. CryptDestroyKey(
  327.     HCRYPTKEY hKey);
  328.  
  329. WINADVAPI
  330. BOOL
  331. WINAPI
  332. CryptSetKeyParam(
  333.     HCRYPTKEY hKey,
  334.     DWORD dwParam,
  335.     BYTE *pbData,
  336.     DWORD dwFlags);
  337.  
  338. WINADVAPI
  339. BOOL
  340. WINAPI
  341. CryptGetKeyParam(
  342.     HCRYPTKEY hKey,
  343.     DWORD dwParam,
  344.     BYTE *pbData,
  345.     DWORD *pdwDataLen,
  346.     DWORD dwFlags);
  347.  
  348. WINADVAPI
  349. BOOL
  350. WINAPI
  351. CryptSetHashParam(
  352.     HCRYPTHASH hHash,
  353.     DWORD dwParam,
  354.     BYTE *pbData,
  355.     DWORD dwFlags);
  356.  
  357. WINADVAPI
  358. BOOL
  359. WINAPI
  360. CryptGetHashParam(
  361.     HCRYPTHASH hHash,
  362.     DWORD dwParam,
  363.     BYTE *pbData,
  364.     DWORD *pdwDataLen,
  365.     DWORD dwFlags);
  366.  
  367. WINADVAPI
  368. BOOL
  369. WINAPI
  370. CryptSetProvParam(
  371.     HCRYPTPROV hProv,
  372.     DWORD dwParam,
  373.     BYTE *pbData,
  374.     DWORD dwFlags);
  375.  
  376. WINADVAPI
  377. BOOL
  378. WINAPI
  379. CryptGetProvParam(
  380.     HCRYPTPROV hProv,
  381.     DWORD dwParam,
  382.     BYTE *pbData,
  383.     DWORD *pdwDataLen,
  384.     DWORD dwFlags);
  385.  
  386. WINADVAPI
  387. BOOL
  388. WINAPI
  389. CryptGenRandom(
  390.     HCRYPTPROV hProv,
  391.     DWORD dwLen,
  392.     BYTE *pbBuffer);
  393.  
  394. WINADVAPI
  395. BOOL
  396. WINAPI
  397. CryptGetUserKey(
  398.     HCRYPTPROV hProv,
  399.     DWORD dwKeySpec,
  400.     HCRYPTKEY *phUserKey);
  401.  
  402. WINADVAPI
  403. BOOL
  404. WINAPI
  405. CryptExportKey(
  406.     HCRYPTKEY hKey,
  407.     HCRYPTKEY hExpKey,
  408.     DWORD dwBlobType,
  409.     DWORD dwFlags,
  410.     BYTE *pbData,
  411.     DWORD *pdwDataLen);
  412.  
  413. WINADVAPI
  414. BOOL
  415. WINAPI
  416. CryptImportKey(
  417.     HCRYPTPROV hProv,
  418.     CONST BYTE *pbData,
  419.     DWORD dwDataLen,
  420.     HCRYPTKEY hPubKey,
  421.     DWORD dwFlags,
  422.     HCRYPTKEY *phKey);
  423.  
  424. WINADVAPI
  425. BOOL
  426. WINAPI
  427. CryptEncrypt(
  428.     HCRYPTKEY hKey,
  429.     HCRYPTHASH hHash,
  430.     BOOL Final,
  431.     DWORD dwFlags,
  432.     BYTE *pbData,
  433.     DWORD *pdwDataLen,
  434.     DWORD dwBufLen);
  435.  
  436. WINADVAPI
  437. BOOL
  438. WINAPI
  439. CryptDecrypt(
  440.     HCRYPTKEY hKey,
  441.     HCRYPTHASH hHash,
  442.     BOOL Final,
  443.     DWORD dwFlags,
  444.     BYTE *pbData,
  445.     DWORD *pdwDataLen);
  446.  
  447. WINADVAPI
  448. BOOL
  449. WINAPI
  450. CryptCreateHash(
  451.     HCRYPTPROV hProv,
  452.     ALG_ID Algid,
  453.     HCRYPTKEY hKey,
  454.     DWORD dwFlags,
  455.     HCRYPTHASH *phHash);
  456.  
  457. WINADVAPI
  458. BOOL
  459. WINAPI
  460. CryptHashData(
  461.     HCRYPTHASH hHash,
  462.     CONST BYTE *pbData,
  463.     DWORD dwDataLen,
  464.     DWORD dwFlags);
  465.  
  466. WINADVAPI
  467. BOOL
  468. WINAPI
  469. CryptHashSessionKey(
  470.     HCRYPTHASH hHash,
  471.     HCRYPTKEY hKey,
  472.     DWORD dwFlags);
  473.  
  474. WINADVAPI
  475. BOOL
  476. WINAPI
  477. CryptDestroyHash(
  478.     HCRYPTHASH hHash);
  479.  
  480. WINADVAPI
  481. BOOL
  482. WINAPI
  483. CryptSignHashA(
  484.     HCRYPTHASH hHash,
  485.     DWORD dwKeySpec,
  486.     LPCSTR sDescription,
  487.     DWORD dwFlags,
  488.     BYTE *pbSignature,
  489.     DWORD *pdwSigLen);
  490. WINADVAPI
  491. BOOL
  492. WINAPI
  493. CryptSignHashW(
  494.     HCRYPTHASH hHash,
  495.     DWORD dwKeySpec,
  496.     LPCWSTR sDescription,
  497.     DWORD dwFlags,
  498.     BYTE *pbSignature,
  499.     DWORD *pdwSigLen);
  500. #ifdef UNICODE
  501. #define CryptSignHash  CryptSignHashW
  502. #else
  503. #define CryptSignHash  CryptSignHashA
  504. #endif // !UNICODE
  505.  
  506. WINADVAPI
  507. BOOL
  508. WINAPI
  509. CryptVerifySignatureA(
  510.     HCRYPTHASH hHash,
  511.     CONST BYTE *pbSignature,
  512.     DWORD dwSigLen,
  513.     HCRYPTKEY hPubKey,
  514.     LPCSTR sDescription,
  515.     DWORD dwFlags);
  516. WINADVAPI
  517. BOOL
  518. WINAPI
  519. CryptVerifySignatureW(
  520.     HCRYPTHASH hHash,
  521.     CONST BYTE *pbSignature,
  522.     DWORD dwSigLen,
  523.     HCRYPTKEY hPubKey,
  524.     LPCWSTR sDescription,
  525.     DWORD dwFlags);
  526. #ifdef UNICODE
  527. #define CryptVerifySignature  CryptVerifySignatureW
  528. #else
  529. #define CryptVerifySignature  CryptVerifySignatureA
  530. #endif // !UNICODE
  531.  
  532. WINADVAPI
  533. BOOL
  534. WINAPI
  535. CryptSetProviderA(
  536.     LPCSTR pszProvName,
  537.     DWORD dwProvType);
  538. WINADVAPI
  539. BOOL
  540. WINAPI
  541. CryptSetProviderW(
  542.     LPCWSTR pszProvName,
  543.     DWORD dwProvType);
  544. #ifdef UNICODE
  545. #define CryptSetProvider  CryptSetProviderW
  546. #else
  547. #define CryptSetProvider  CryptSetProviderA
  548. #endif // !UNICODE
  549.  
  550. #ifdef __BORLANDC__
  551. #  include <poppack.h>
  552. #endif
  553.  
  554.  
  555. #ifdef __cplusplus
  556. }       // Balance extern "C" above
  557. #endif
  558.  
  559. #endif /* _WIN32_WINNT >= 0x0400 */
  560.  
  561. #pragma option pop
  562. #endif // __WINCRYPT_H__
  563.